package com.orange.core.service.activity;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.orange.core.pojo.PageReqDto;
import com.orange.core.pojo.entity.activity.dto.ActivityDTO;
import com.orange.core.pojo.entity.activity.dto.ActivityRegistrationAuditDTO;
import com.orange.core.pojo.entity.activity.dto.ActivityRegistrationOrder;
import com.orange.core.pojo.entity.activity.vo.ActivityVO;
import com.orange.core.pojo.entity.activity.vo.RegistrationVO;
import com.orange.core.pojo.entity.activityRegistration.dto.ActivityRegistrationDTO;
import com.orange.core.pojo.entity.activityRegistration.vo.ActivityRegistrationVO;
import com.orange.core.pojo.req.activity.ActivityPageReq;
import com.orange.core.pojo.req.activityRegistrations.ActivityRegistrationPageReq;
import com.orange.core.pojo.rsp.activity.ActivityOrderPayRsp;
import com.orange.core.pojo.rsp.activity.ActivityOrderRsp;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * <p>ClassName:ActivityService</p>
 * <p>Description: 活动管理service</p>
 * <p>Author: lwm</p>
 * <p>Date: 2025/5/22 23:30</p>
 */
public interface ActivityService {

    /**
     * 活动管理分页查询
     * @param pageReqDto
     * @return
     */
    Page<ActivityVO> page(PageReqDto<ActivityPageReq> pageReqDto);


    /**
     * 活动管理详情
     * @param id
     * @return
     */
    ActivityVO info(int id);

    /**
     * 活动管理新增
     * @param activityDTO
     * @return
     */
    boolean save(ActivityDTO activityDTO);

    /**
     * 活动管理修改
     * @param activityDTO
     * @return
     */
    boolean update(ActivityDTO activityDTO);

    /**
     * 活动管理批量删除
     * @param ids
     * @return
     */
    boolean deleteActivityByIds(Integer[] ids);

    /**
     * 活动报名
     * @param activityRegistrationDTO
     * @return
     */
    Boolean registerActivity(ActivityRegistrationDTO activityRegistrationDTO);

    /**
     * 获取用户报名列表
     *
     * @param pageReqDto
     * @return
     */
    Page<ActivityRegistrationVO> getUserRegistrations(PageReqDto<ActivityRegistrationPageReq> pageReqDto);

    /**
     * 取消报名
     * @param registrationId
     * @param userId
     * @return
     */
    Boolean cancelRegistration(Integer registrationId, Integer userId);

    /**
     * 设置热门活动
     * @param activityId
     * @param isHot
     * @return
     */
    Boolean setHotActivity(Integer activityId, Integer isHot);

    /**
     * 获取热门活动
     * @return
     */
    List<ActivityVO> getHotActivityList();

    /**
     *
     * @param activityId
     * @return
     */
    RegistrationVO registration(Integer activityId);


    /**
     * 报名审核
     * @param auditDTO
     * @return
     */
    Boolean audit(ActivityRegistrationAuditDTO auditDTO);

    /**
     * 活动列表
     * @return
     */
    List<ActivityVO> activityList();

    /**
     * 创建活动报名订单
     * @param activityId
     * @return
     */
    ActivityOrderRsp generateOrder(Integer activityId);

    /**
     * 支付活动报名订单
     * @param activityRegistrationOrder
     * @return
     */
    ActivityOrderPayRsp pay(ActivityRegistrationOrder activityRegistrationOrder);

    /**
     * 微信支付回调
     * @param notifyResutl
     * @return
     */
    String wechatPayNotify(String notifyResutl);

    /**
     * 活动-微信退款回调
     * @param notifyResutl
     * @return
     */
    String wechatRefundNotify(String notifyResutl);

    /**
     * 活动退款
     * @param registrationId 报名名ID
     * @return
     */
    Boolean refund(int registrationId,Integer userId,String orderNo,String reviewReason);

    /**
     * 报名人员信息导出
     * @param response
     * @param activityId
     */
    void export(HttpServletResponse response, Integer activityId);
}
